﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using System.Linq;
using Pakxel.Data;
using System.Data.Common;
using Telerik.WinControls.UI;


namespace Pakxel.SmartLogistic
{
   public partial class AnticiposWorkBench : BaseWorkBench
   {
      public AnticiposWorkBench()
      {
         InitializeComponent();
      }

      void SetupAnticiposGrid()
      {
         ///TODO ADD : If user is in ROL (Admin,Supervisor) change to true
         AnticiposGrid.AllowEditRow = false;

         GridViewTextBoxColumn colT012NoAnticipo = new GridViewTextBoxColumn("T012NoAnticipo", "T012NoAnticipo");
         colT012NoAnticipo.HeaderText = "No Anticipo";
         colT012NoAnticipo.Width = 120;

         GridViewDecimalColumn colT012Monto = new GridViewDecimalColumn("T012Monto", "T012Monto");
         colT012Monto.HeaderText = "Monto   ";
         colT012Monto.FormatInfo = new System.Globalization.CultureInfo("es-MX");
         colT012Monto.FormatString = "{0:C}";
         colT012Monto.Width = 220;

         GridViewDateTimeColumn colT012Fecha = new GridViewDateTimeColumn("T012Fecha", "T012Fecha");
         colT012Fecha.HeaderText = "Fecha";
         colT012Fecha.FormatInfo = new System.Globalization.CultureInfo("es-MX");
         colT012Fecha.FormatString = "{0:dd/MM/yyyy}";
         colT012Fecha.Width = 220;

         GridViewTextBoxColumn colT012Cancelado = new GridViewTextBoxColumn("T012Cancelado", "T012Cancelado");
         colT012Cancelado.DataSourceNullValue ="N";
         colT012Cancelado.IsVisible = false;

         GridViewTextBoxColumn colT005NoViaje = new GridViewTextBoxColumn("T005NoViaje","T005NoViaje");
         colT005NoViaje.IsVisible = false;
         try
         {
            AnticiposGrid.Columns.Add(colT012NoAnticipo);
            AnticiposGrid.Columns.Add(colT005NoViaje);
            AnticiposGrid.Columns.Add(colT012Fecha);
            AnticiposGrid.Columns.Add(colT012Monto);
            AnticiposGrid.Columns.Add(colT012Cancelado);
         }
         catch (SystemException se)
         {
            MainApp.WriteExceptionToLog(se); 
         }
      }

      private void AnticiposWorkBench_Load(object sender, EventArgs e)
      {
         SetupAnticiposGrid();
         WorkBenchFilter.KeyDown += new KeyEventHandler(WorkBenchFilter_KeyDown);
         tsbNvo.Click += new EventHandler(tsbNvo_Click);
         tsbEdit.Click += new EventHandler(tsbEdit_Click);
         tsbSave.Click += new EventHandler(tsbSave_Click);
         DataContext = new Data.MEDataDataContext(WorkBench.ConnectionString);
      }

      void tsbSave_Click(object sender, EventArgs e)
      {
         if (Viaje != null && (Viaje.T016IdLiquidacion==0 || Viaje.T016IdLiquidacion==null)) 
         {
            DataContext.Log = Console.Out;
            if (Viaje.T016IdLiquidacion == null)
            {
               if (DataContext.Connection.State == ConnectionState.Closed)
               {
                  DataContext.Connection.Open();
               }
               using (DbTransaction transaction = DataContext.Connection.BeginTransaction(IsolationLevel.Serializable))
               {
                  DataContext.Transaction = transaction;
                  try
                  {
                     int NoAnt = 0;
                     foreach (Telerik.WinControls.UI.GridViewRowInfo Row in AnticiposGrid.Rows)
                     {
                        if(Row!=null)
                        {
                           if (Convert.ToInt32(Row.Cells["T012NoAnticipo"].Value) <= 0)
                           {
                              if (Convert.ToDecimal(Row.Cells["T012Monto"].Value) > 0)
                              {
                                 T014 Parametros = (from P in DataContext.T014s where P.T014IdParametro.Equals("FOLANT") select P).SingleOrDefault();
                                 if (Parametros != null)
                                 {
                                    NoAnt = Convert.ToInt32(Parametros.T014Val1);
                                    NoAnt++;
                                    Parametros.T014Val1 = Convert.ToString(NoAnt);
                                    Row.Cells["T005NoViaje"].Value = Viaje.T005NoViaje.ToString();
                                    Row.Cells["T012Cancelado"].Value = "N";
                                    Row.Cells["T012NoAnticipo"].Value = NoAnt;
                                 }
                              }
                           }
                        }
                     }
                     DataContext.SubmitChanges();
                     transaction.Commit();
                  }
                  catch (Exception ex)
                  {
                     transaction.Rollback();
                     MainApp.WriteExceptionToLog(ex);
                  }
                  finally
                  {
                     AnticiposGrid.DataSource = from A in DataContext.T012s where A.T005NoViaje.Equals(Convert.ToInt32(WorkBenchFilter.Text)) select A;
                     DataContext.Connection.Close();
                  }
               }
            }
         }
         else
         {
            ClearControls(this.Controls);
            AnticiposGrid.DataSource = null;
            Viaje = null;
         }
      }

      //void UpdateNoAnticipo(int Index,int NoAnticipo)
      //{
      //   Telerik.WinControls.UI.GridViewRowInfo Row;
      //   Row = AnticiposGrid.Rows[Index];
      //   Row.Cells["T005NoViaje"].Value =Viaje.T005NoViaje;
      //   Row.Cells["T012Cancelado"].Value = "N";
      //   Row.Cells["T012NoAnticipo"].Value = NoAnticipo;
      //}

      void tsbEdit_Click(object sender, EventArgs e)
      {
         // Validar Rol del usuario
         // Activar al eliminacion de renglones en el grid
         // Buscar el registro y eliminarlo de la bd
      }

      void tsbNvo_Click(object sender, EventArgs e)
      {
         ClearControls(this.Controls);
         AnticiposGrid.DataSource = null;
         Viaje = null;
      }

      void WorkBenchFilter_KeyDown(object sender, KeyEventArgs e)
      {
         if (e.KeyCode == Keys.Enter && IsNumeric(WorkBenchFilter.Text))
         {
            if (Viaje != null)
            {
               var ds = from A in DataContext.T012s where A.T005NoViaje.Equals(Convert.ToInt32(WorkBenchFilter.Text)) && A.T012Cancelado.ToString().Equals("N")  select A;
               if (ds != null)
               {
                  AnticiposGrid.DataSource = ds;
               }
            }
            else
            {
               ClearControls(this.Controls);
               AnticiposGrid.DataSource = null;
            }
         }
      }

      private void AnticiposGrid_CellBeginEdit(object sender, GridViewCellCancelEventArgs e)
      {
         if (e.Column.Name.Equals("T012NoAnticipo"))
         {
            e.Cancel = true;
         }
      }
   }
}
